package com.lyf.language.practice.practice_6_21.exception;

import org.junit.Test;

/**
 * 异常处理：
 * 1.异常处理的分类
 *  受检异常（编译前发现） fileNotFound,
 *  非受检异常（编译后发现） oom,nullPoint,
 *
 * 2.抛异常的形式
 * try catch throw
 * throws
 *
 *
 * 3.异常处理流程
 *
 * （1）无return
 * （2）有return
 *
 *
 * @author LYF
 * @date 2022/6/21
 */
public class ExceptionDemo {
    @Test
    public void test1(){

        try {
            Class.forName("");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test2() throws Exception{
        Class.forName("");
    }

    // 测试含return的
    // 暂存副本？=
    public int returnTest(){
        int i=0;
        try {
            i++;

            //throw new Exception("this is a return exception!");
           // return i;
        }catch (Exception e){
            i++;
            e.printStackTrace();
            return i;

        }finally {
            i++;
            // finally的return会覆盖掉 catch中的return!
            return i;
        }
        //return 1;
    }

    /**
     * 异常出来的执行流程
     */
    @Test
    public void test3(){

        try {
            // 内嵌一个异常处理的
            // test2(); // 抛异常，直接finally处理
            System.out.println("hello test3");
            // int i = 1/0;   // 抛异常---
            throw new Exception("this is a exception");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println(returnTest());
            System.out.println("finally exec");
        }
    }




}
